package com.example.dc.Controller;

import com.example.dc.Service.ChatService;
import com.example.dc.domain.Chat;
import com.example.dc.domain.ChatBean;
import com.example.dc.domain.Chatgpt;
import com.example.dc.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 聊天功能控制器
 * 处理与聊天相关的所有HTTP请求
 */
@Slf4j
@RestController
@RequestMapping("/chat")
public class ChatController {
    @Autowired
    private ChatService chatService;

    /**
     * 处理与ChatGPT的对话请求
     * @param chatBean 包含用户输入的聊天信息
     * @return 返回ChatGPT的响应结果
     */
    @CrossOrigin
    @PostMapping("/chatgpt")
    public Result synthesizeVoice(@RequestBody ChatBean chatBean) throws Exception {
//        try{
        // 调用service层处理聊天逻辑，获取ChatGPT的回答
        String answer = chatService.postResult(chatBean);
        return Result.success(answer);
//        }catch (Exception e){
//            return Result.systemError();
//        }
    }

    /**
     * 获取用户的问候语
     * @param userId 用户ID
     * @param location 用户位置
     * @return 返回根据时间和位置生成的问候语
     */
    @GetMapping("/greet")
    public Result getGreet(Integer userId, String location) {
        String greet = chatService.getGreet(userId, location);
        return Result.success(greet);
    }

    /**
     * 获取用户的所有聊天历史记录
     * @param userId 用户ID
     * @param createTime 创建时间（未使用）
     * @return 返回该用户的所有聊天记录
     */
    @GetMapping("/history/all")
    public Result getHistory(Integer userId, String createTime) {
        System.out.println("userId:"+userId);
        List<Chatgpt> result = chatService.getHistory(userId);
        return Result.success(result);
    }

    /**
     * 根据时间获取用户的聊天历史记录
     * @param userId 用户ID
     * @param createTime 指定的时间
     * @return 返回指定时间的聊天记录
     */
    @GetMapping("/history/time")
    public Result getHistoryByTime(Integer userId, String createTime) {
        List<Chat> result = chatService.getHistoryByTime(userId,createTime);
        return Result.success(result);
    }
}
